Apren p5.js - Cares Animades

1. Cara Estàtica

function setup() {
    createCanvas(200, 200);
}

function draw() {
    background(220);
    
    // Cap
    fill(255, 255, 0);
    ellipse(100, 100, 150, 160);
    
    // Ulls
    fill(0);
    ellipse(70, 80, 30, 30);
    ellipse(130, 80, 30, 30);
    
    // Boca
    noFill();
    arc(100, 130, 80, 40, 0, PI);
}

2. Cara amb Detalls

function setup() {
    createCanvas(200, 200);
    angleMode(DEGREES);
}

function draw() {
    background(170, 220, 255);
    
    // Cap
    fill(255, 205, 148);
    ellipse(100, 100, 150, 160);
    
    // Ulls
    fill(255);
    ellipse(70, 80, 40, 30);
    ellipse(130, 80, 40, 30);
    fill(0);
    ellipse(70, 80, 20, 20);
    ellipse(130, 80, 20, 20);
    
    // Celles
    strokeWeight(3);
    line(50, 60, 90, 65);
    line(110, 65, 150, 60);
    
    // Boca
    fill(255, 100, 100);
    arc(100, 140, 60, 40, 0, 180);
    
    // Nas
    strokeWeight(2);
    line(100, 100, 90, 120);
    line(90, 120, 110, 120);
}

3. Cara Animada

let angle = 0;

function setup() {
    createCanvas(200, 200);
}

function draw() {
    background(180, 200, 255);
    
    // Cap
    fill(255, 200, 150);
    ellipse(100, 100, 150, 160);
    
    // Ulls que segueixen el ratolí
    let pupilX = map(mouseX, 0, width, -5, 5, true);
    let pupilY = map(mouseY, 0, height, -5, 5, true);
    
    // Ull esquerre
    fill(255);
    ellipse(70, 80, 40, 30);
    fill(0);
    ellipse(70 + pupilX, 80 + pupilY, 15, 15);
    
    // Ull dret
    fill(255);
    ellipse(130, 80, 40, 30);
    fill(0);
    ellipse(130 + pupilX, 80 + pupilY, 15, 15);
    
    // Parpelleig
    if(frameCount % 120 < 5) { // Cada 2 segons
        fill(255, 200, 150);
        rect(50, 65, 40, 30);
        rect(110, 65, 40, 30);
    }
    
    // Boca que s'obre i es tanca
    let mouthY = sin(angle) * 5 + 130;
    fill(255, 100, 100);
    arc(100, mouthY, 60, 40, 0, PI);
    angle += 0.1;
}

Exercicis per Practicar